<?php

/**
 * Занимается обработкой информации, связанной с кафедрами
 * Включает:
 * 	названия кафедр,
 * 	коды кафедр,
 * 	предметы, находящиеся в ведении кафедры.
 */
class departments {
	
	/**
	 * Код кафедры
	 * @var string
	 */
	private $department_code = NULL;
	
	/**
	 * Данные о кафедрах
	 * Берутся из конфигурационного файла
	 * @var array
	 */
	private $departments_data = NULL;
	
	function __construct($department_code = 'all') {
		$this->set_department_code($department_code);
		$this->init_departments_data();
	}
	
	function __destruct() {
		
	}
	
	function set_department_code($department_code) {
		if (is_array($department_code)) {
			$this->department_code = implode(',', $department_code);
		} else {
			$this->department_code = $department_code;
		}
	}
	
	function init_departments_data() {
		global $CFG;
		$this->departments_data = include($CFG->app_dir . '/config/departments.php');
	}
	
	/**
	 * Берет все предметы кафедр
	 */
	private function get_all_subjects() {
		$subjects = array();
		for ($i = 0; $i < count($this->departments_data); $i++) {
			$subjects = array_merge($subjects, $this->departments_data[$i]['subjects']);
		}
		return $subjects;
	}
	
	/**
	 * Берет предметы нужной кафедры
	 */
	private function get_department_subjects() {
		$department_codes = explode(',', $this->department_code);
		$subjects = array();
		for ($i = 0; $i < count($this->departments_data); $i++) {
			if (array_search($this->departments_data[$i]['code'], $department_codes) !== false) {
				$subjects = array_merge($subjects, $this->departments_data[$i]['subjects']);
			}
		}
		return $subjects;
	}
	
	/**
	 * Берет названия предметов для отображения в форме
	 */
	function get_subjects() {
		if ($this->department_code == 'all') {
			return $this->get_all_subjects();
		} else {
			return $this->get_department_subjects();
		}
	}
	
	/**
	 * Берет служебные названия курсов кафедры для фильтра отчета
	 */
	function get_courses() {
		$department_codes = explode(',', $this->department_code);
		$courses = array();
		for ($i = 0; $i < count($this->departments_data); $i++) {
			if (array_search($this->departments_data[$i]['code'], $department_codes) !== false) {
				$courses = array_merge($courses, $this->departments_data[$i]['courses']);
			}
		}
		return $courses;
	}
	
	/**
	 * Возвращает название кафедры по ее коду
	 */
	function get_department_name() {
		for ($i = 0; $i < count($this->departments_data); $i++) {
			if ($this->department_code == $this->departments_data[$i]['code']) {
				return $this->departments_data[$i]['name'];
			}
		}
	}
	
	/**
	 * Берет названия кафедр.
	 * @return array(
	 * 	'department[code]' => 'department[name]'
	 * )
	 */
	function get_departments() {
		$result = array();
		for ($i = 0; $i < count($this->departments_data); $i++) {
			$result[$this->departments_data[$i]['code']] = $this->departments_data[$i]['name'];
		}
		return $result;
	}
}

?>
